約 2,956,512 件
https://w.atwiki.jp/perotanfenix/pages/199.html
名前 割れてきたからエミュ限 分類 テンプレ 説明 荒れてきたからコミュ限にしよう のもじり極悪違法エミュでゲームをしておきながらそれを指摘されると、その途端にコミュ限にしてしまう生主などを皮肉った言葉である 配信での扱われ方 荒れて来た時や他の放送にこんばんわした時によく使われる 関連項目 ザアカイ 極悪のエミュ 新作実況通報RTA
https://w.atwiki.jp/is01next/pages/34.html
■カーネル書き換えソフト IS01 Super Tuner http //blog.ns-koubou.com/archives/19 IS01用の自動改造ソフトです。 スクリプトを追加することでさまざまな種類の改造が可能です。 IS01 Hacked Kernel #001を書き込む(recovery領域) アドホック対応化 recovery領域のバックアップ ※同梱された「readme.txt」より抜粋。 ■リンク 仙石浩明の日記 Android 端末 IS01 のカーネルを入れ替えてみた 〜 さよならデッカード LSM http //www.gcd.org/blog/2010/12/682/ IS01 Hacked Kernel #001 http //www.megaupload.com/?d=QA6TOXY8 def RenaX64(diary) IS01のkernelをビルドしちゃおう! http //renax64.blogspot.com/2010/12/is01kernel.html えぬえす工房 » IS01関連の自作ファイルのまとめ http //blog.ns-koubou.com/archives/19 IS01 root化と諸々の作業メモ « コムギドットネット http //komugi.net/archives/2010/12/06205920.php ■カーネル1 仙石浩明の日記 Android 端末 IS01 のカーネルを入れ替えてみた 〜 さよならデッカード LSM http //www.gcd.org/blog/2010/12/682/ 624 カーネル入れ替えの方法が確立されたっぽい。 ツールの改造が必要だったりと敷居は高いみたいだけど。 http //www.gcd.org/blog/2010/12/682/ 625 624 ほぼ完成してますよ。これ。フラッシュの損耗なんかたいした問題とも思えないが。 twitter MobileHackerz http //mobile.twitter.com/mobilehackerz/status/10931598044172288 #IS01 、仙石さんのubi.img http //j.mp/dU7ChW をそのまま書いて、 SDにswap作っただけで恐ろしく快適になった(swapはMarketで ダウンロードできるSwapperで簡単設定可)。ブラウザ使っても 他がkillされないだけでこんなに快適とは ■カーネル2 IS01 Hacked Kernel #001 http //www.megaupload.com/?d=QA6TOXY8 カーネルをお手軽に改造できるソフト http //www.megaupload.com/?d=JOONZLDV アドホック対応化スクリプト http //www.megaupload.com/?d=MT9LRIGF 634 自分が使ってる改造カーネルをアップ。動作保証はできないけど。 http //www.megaupload.com/?d=QA6TOXY8 639 634 NVさんイメージありがとうございます。但し /default.propの ro.secure=0 のままなので、adb shell でrootになれません。 とりあえず、ubi.imgにバイナリーパッチ当ててOKに出来ましたけど。 sengokuさんのブログでもこの部分ro.secure=0としてありましたけど、 ro.secure=1とすることでadb shellだけで#プロンプトが出るようになります。 640 639 ro.secureは、tcpipを使えなくするために1のままにしてあります。 代わりに、adb rootでadbdを再起動することによって、#プロンプトが出るようになります。 958 SWAP ONにして使っていたらフリーズしたので報告 NVさんの HACK カーネルを利用させて頂いて SWAP 128MB で使っていたのですが、 2時間ほどして、画面がブラックアウトしていてキーを受け付けない状態になりました。 バックライトが薄く点いている状態で、電源を切ることができなくなっていたので 電池外して復旧しました。 通常bootして今はスワップ無しで動いています、SD カードの内容も読めています。 1.00.07 176 カーネルをお手軽に改造できるソフトを作ってみた。人柱求む。 http //www.megaupload.com/?d=JOONZLDV 190 176 2.6.29-perf nvsofts@cimo#2 へのカーネル書き換え成功確認しました ベースバンド01.00.02のrooted済みで前回のNVさんのカーネルから書き換えました 193 190 中身はIS01 Hacked Kernel #001と一緒なので、recoveryを元に戻してから書き換えを行ったらどうなりますか? 192 176 カーネルバージョンが↑と一緒に書き換わって起動することを確認しました。 1.00.07 一応、Android-SDK はインストール済みでパスを通してあるPC環境です。 他、IS01rooter002 インストール、実行済み 195 193 自分は recovery_rw を元に戻した状態で書き換えたので、 正常に更新できていると思います。 (以前にNVさんのハックカーネルにしていたが、SWAP ON でフリーズの症状が出た為、年の為に recover_rw をバックアップから復元してました。) 197 195 大丈夫そうですね。ありがとうございます。 アドホック対応化スクリプトをアップしておきます。正常に動作するかはわかりません。 http //www.megaupload.com/?d=MT9LRIGF 218 NVさんおつかれっす。カーネルに関してはmobilehackersさんがrooterで対応してくれるのかな まだ様子見 821 820 v1.00の場合、画面は通常のrecovery画面と一緒です。 また、$ toolbox mount の情報で、/systemがマウントされていません。 v1.10の場合、画面は通常のrecovery画面とは左右反転しています。 また、$ toolbox cat /proc/version のカーネルのビルドPCがnvsofts@cirnoになっています。 IS01 Super Tuner v1.10です。アドホック対応化の修正とrecovery領域のリストアの追加を行いました。 http //www.megaupload.com/?d=UJ637AYD ■カーネルの入れ替え:注意点1 765 前にも誰かが書いてたけど、system_wrいじると文鎮化するね ■カーネルの入れ替え:注意点2 798 カーネルコンパイルすると いくつもエラー吐くなあ なんだこのソース 799 798 そのままだとエラーが出てコンパイルできない。 ここを参考にしてコンパイルを。 http //d.hatena.ne.jp/nigaky/20101118/1290094627 800 799 トン smd_private.hのincludeは修正したけど他にもまだエラー吐くんだよ これ専用のクロスコンパイラ必要なの? 俺gcc-4.4.5をビルドしたやつ使ってるんだけど 802 800 IS01 Hacked Kernel #001は、Android NDK付属のarm-eabi-gcc(gcc-4.2.1)でビルドしてる ■カーネルの入れ替え (insmod+を同梱):パスはdeckard http //uploading.com/files/faff9af4/rachael-0.0.beta.2.7z/ http //uploading.com/files/m64ma8db/rachael-0.0.beta.2-src.zip/ 924 ある程度使える代物ができたので、コンパイル済みのmoduleをアップしました。 ttp //uploading.com/files/3c826577/rachael-0.0.alpha.1.zip/ パスはdeckardです。 このmoduleをロードすると、/procに以下のファイルが追加されます。 /proc/rachael/modules_disabled 1→0の変更が可能な、/proc/sys/kernel/modules_disabledの別名。 # echo 0 /proc/rachael/modules_disabled でmodule操作の再有効化ができます。 /proc/rachael/security_ops DECKARD LSMの設定。 1 が有効、 0 が無効。 # cat /proc/rachael/security_ops などと読み出せば今の設定が分かり、 # echo 0 /proc/rachael/security_ops などと書き込めば設定を変更できます。 /proc/rachael/nand_protection (※) NAND Lockの設定。ビットフラグ。1で有効、0で無効。 下位ビットから順に、"boot"、"recovery"、"system"に対応します。 初期状態では 7 、つまり0b111で、全て有効になっているはずです。 例えば、 # echo 5 /proc/rachael/nand_protection などとすれば、0b101となるので、"recovery"だけが解除されます。 (続く) 925 (続き) /proc/rachael/nandinfo 読み出し専用。現在のs_protect_info[]の値、つまりNANDの保護状態を、 .flg、.start、.endの順に表示します。全て十進表記です。 dmesgで分かるNANDの領域情報と比較することで、moduleがNANDの情報を 正しく認識しているかの確認ができます。また、nand_protectionへの 書き込み操作も反映されます。 /proc/rachael/ksyms 読み出し専用。moduleが解決したkernel symbolの情報を/proc/kallsyms と同様の形式で表示します。最初は空ですが、上で書いた操作を行うと 増えていきます。 現バージョンでは、非実装の部分を補うために、ロード時のアドレス指定が 必須となっています。それを自動で行うローダinsmod+を同梱してあります。 module名がrachael.に一致する場合には、必要な引数を検出して追加します。 # ./insmod+ rachael.ko などと使います。 また、※をつけたnand_protectionは、危険性が段違いなので、ロード時に i_cannot_tell_is01_from_glasses_case=1というオプションを付けないと 出現しないようにしてあります。NANDの書き込みについては、実験できる 機体がなく、まだ試していません。 942 昨夜のモジュールを手直しして再アップしました。 ソースコードの整理もできたので、同梱してあります。 ttp //uploading.com/files/ma15b27m/rachael-0.0.beta.1.zip/ パスはdeckardです。 簡単なコード解析でアドレス検出を行いますので、ソースの該当部分に変更がなければ、 カーネル再構築でずれたとしても問題なく追従します。 977 エラー処理で甘い所があったので修正です。今回はソースを分離しました。 なぜか片方だけzipだとアップできなかったので7zにしてあります。中々アップ出来ず疲れた… ttp //uploading.com/files/faff9af4/rachael-0.0.beta.2.7z/ ttp //uploading.com/files/m64ma8db/rachael-0.0.beta.2-src.zip/ パスはdeckardです。 371 ./insmod+ -f rachael.koで普通にロードできた。 何だこれ。 377 素の01.00.07なんだが、 /sh_tmp # lsmod unifi_sdio 294368 0 - Live 0x7f000000 /sh_tmp # cat /proc/sys/kernel/modules_disabled 1 /sh_tmp # ./insmod+ -f rachael.ko force loading... insmod rachael.ko addr=0x800a206c /sh_tmp # lsmod rachael 11660 0 - Live 0x7f0aa000 unifi_sdio 294368 0 - Live 0x7f000000 /sh_tmp # cat /proc/sys/kernel/modules_disabled 1 何かおかしくね? 378 377 insmod+使うと、modules_disabledが1でもロードできるっぽい。 どうやってやってるかは知らないけど。 380 378 レスさんくすです。 俺の勘違いじゃなくて良かった。 381 いや、良かないか。新手の罠か? 382 中身を覗いてみたけど、なんかの脆弱性を突いてる気がする。 383 しれっとすごいコードがリリースされてるんだな… ■カーネルの入れ替え:その他もろもろ 935 NDKのクロスコンパイラ使ってもカーネル構築できないなあ 初期化前の変数を参照してるエラーがいくつも出てくる 構築してる人はソース修正してる? 941 935 CFLAGSの-Wallをはずしてあげれば、そのあたりはエラーにはならないですよ。 kernelソースのトップにあるMakefileの HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer や KBUILD_CFLAGS = -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ の-Wallを消してビルドしてみてください。 あとは関数のStack利用サイズのチェックでエラーがでる場合はkernelのトップにある .config内の CONFIG_FRAME_WARN=1024 を2048に増やしてあげれば大丈夫です。 943 941 ありがとうございます warningを吐きますが、バイナリ出力まで通りました というか、公開ソースで配布(出荷)バイナリを構築できないなら、GPLに反してるんじゃ…? 168 JN-DK01のオープンソース版boot.imgで起動させようとしたけど、ISロゴから進まない。 この時点では、recovery_kitでカーネルを元に戻すことはできた。 170 168 報告乙です。自分はSystemまで焼いてしまったので復旧に四苦八苦中。 172 170 system領域は、直接焼かないでtarとかでファイルを展開する形の方が良いかもしれませんね。 944 応援・雑談スレで聞いていたのですが、ROM焼きにも関係するので、 こちらに移動します。本スレ828でrecovery.img は展開できました。 system.img(ddでmtd5) を展開するにはどうしたら良いんでしょうか? unyaffs ではエラー出ましたし…。 system.img 取り込み→PC側で展開&再構築→書き戻し という事を行いたいのです。 945 944 system.imgのダンプを見てみましたが、NANDのoob領域がダンプで来ていないようです。 対応版のdump_imageを作成してみましたので、こちらでsystemとuserdataのダンプをしてみてください。 ソース付きです。 http //hotfile.com/dl/89720710/8209e6f/is01_mtdutils.zip.html こちらでダンプしたものであれば、普通にunyaffsできると思います。 946 dump_imageのスタティックビルド版も入れておきました。 http //hotfile.com/dl/89721932/90bc0eb/is01_mtdutils2.zip.html 948 945 946 goroh_kun ありがとうございます。早速、試してみました。 PC側は ubuntu x64です。 $ unyaffs system.img Segmentation fault 展開結果を見ると、~padding58.pad まではpadファイルが出来てます。 system内にはpadding63.padまであるようです。 そもそも、このpadファイルがなにかイマイチ不明なのですが…。 unyaffs の出力が mkyaffs2image で元に戻るかどうかを試すつもりですが、 unyaffs がどこでこけているか、もうちょっと見てみます。 972 mkyaffs2imageで作ったイメージをubinizeしてから書いたらどうだろう。 974 972 systemとuserdataはubiにはなっていませんので、やらないほうが良いかと思います・・ ubiファイルシステムが使われているのは、boot, recovery, iplの3領域のみです。
https://w.atwiki.jp/is01rebuild/pages/36.html
boot.img の作成 boot.img の作成について ramdhiskイメージ まず、起動時に / に作成される RAMDISK イメージを作成する。 ディレクトリ、ramdisk の様なモノを作成して、make が完了したらできる、rootディレクトリで作業を行う。 $ANDROID_SRC/out/target/product/generic/root/ ここにある、 init.rc が起動時に各ディレクトリの自動作成、ファイルの所有者・パーミッション、 立ち上げるサービス、初期化プログラムなどを決定するスクリプトとなる。 また、 init というファイルはプログラムで、カーネルが起動完了した後に最初に実行される、 プロセス番号1番のプログラムである。 $ANDROID_SRC/out/target/product/generic/root/ makeされた素の root は取っておきたいので、 $ cp -a root ramdisk などして、複製を作り以降 ramdisk ディレクトリで作業を行う。 ファイル init.rc さえちゃんと編集しておけ普通に起動してくると思う。 ramdiskを fs イメージにする。 書式は mkbootfs $(RAMDISKDIR) $(RAMDISK) のような形になる。 実行例: $ mkbootfs ramdisk my_ramdisk.img ブートイメージ(一歩手前)を作成する mkbootimg は先に patch を当てて make してできた、mkbootimg を利用する。 書式はこのような感じ mkbootimg --kernel $(KERNEL) --ramdisk $(RAMDISK) --cmdline $(CMDLINE) --base 0x20000000 -o $(mkbootimg.img) 実行例: $ mkbootimg --kernel boot_orig.bin.out-kernel --ramdisk my_ramdisk.img \ --cmdline "console=ttyMSM2,115200n8 androidboot.hardware=qcom" --base 0x20000000 -o my_mkboot.img 折り返しのため、\を入れたが、一行で入力する際は、\は必要ない。 bootイメージを ubi に変換する 書式 ubinize -o $(my_boot) -p 128KiB -m 2048 -O 256 $(ubi) そして、設定ファイル ubi.cfg 必要である。 下記のようなテキストを作成し、ubi.cfg として保存する。 [boot] mode=ubi image=my_mkboot.img vol_id=0 vol_size=200MiB vol_type=dynamic vol_name=boot vol_flags=autoresize 最終行は改行を忘れないように! 実行例: $ ubinize -o my_boot.img -p 128KiB -m 2048 -O 256 ubi.cfg 以上で実機に転送できる、boot.img の作成完了。 検証したい場合 新規に適当なディレクトリを作成してからの方が良い。 上記操作ディレクトリと同じ場所で行うと混乱する。 $ unubize.pl my_boot.img これで、my_boot.img.out と言うファイルが出力される。 これは、ubi化する逆で 出てくるのは先の説明の my_mkboot.img に該当する。 次に、my_boot.img.out を kernel と ramdisk イメージに分離する。 $ split_bootimg.pl my_boot.img.out を実行する。 次の、2つのファイルが出力される。 my_boot.img.out-kernel my_boot.img.out-ramdisk.cpio my_boot.img.out-kernel はそのままの kernel である。 my_boot.img.out-ramdisk.cpio は ramdisk ディレクトリ内を cpio でまとめたものである。 my_boot.img.out-ramdisk.cpio を展開するには、 $ cat my_boot.img.out-ramdisk.cpio | cpio -i 等として展開できるがカレントディレクトリに展開されるので、何かディレクトリを作成し、 $ cat ../my_boot.img.out-ramdisk.cpio | cpio -i としたほうが良いかと思う。 unubize.pl、split_bootimg.pl は本スレにリンクが有りました。 もしくは、「ubiイメージを変換してkernelとramdisk.cpioを抽出」でgoogleで検索するとよいでしょう。 間違いなど有れば指摘して頂ければ幸いです froyonomake -f build/core/main.mk mkbootimg -- makeneko (2011-01-03 18 51 39) 途中で書き込んじゃったorz 初心者のためいきなりのfroyoのfull buildは敷居が高かったので、repo sync>パッチ当て後にmkbootimgを単品compileしてhacked kernel作りました ) -- makeneko (2011-01-03 18 59 04) makenekoさん、うまくいきましたでしょうか? 成功されたなら幸いです。 -- is01rebuild (2011-01-04 03 00 06) 上の-f を使ったmakeでmkbootimgだけ作って、ubiイメージ作成→flash_image→起動まで行けました。その後froyoをfull buildしましたが、思った以上にメモリを要求されて手間取りました(つω<; -- makeneko (2011-01-04 17 37 19) 良かったです。make にはメモリもCPUパワーも消費しますね。wiki上に間違いなど有りましたらご指摘下さい。 -- is01rebuild (2011-01-04 18 09 13) 名前 コメント
https://w.atwiki.jp/is01next/pages/44.html
BB10に関する資料 現在(2011/03/02時点)では、NV氏のIS01 Super Tunerの公開が終了されているため、それを使わない方法を羅列しました。 元は自分が躓いた所のメモ書きなので、不親切だったり間違ってたりするかもしれません。その辺は修正して欲しいです。 チュートリアルじゃなく、内容を理解して動かせる事を想定してます。 BB10に関する資料 最低限の環境 基礎知識先人様方への感謝 出来る事 分かりにくそうな箇所? 各有志様のツールについて やった方が良い事linuxの知識を得る 各領域のバックアップ 具体的な方法:基礎root化 insmod解禁 /systemの書き換え カーネルの書き換え 具体的な方法:目的別テザリング 解像度変更、またはCPUクロックダウン プリインストールされたソフト削除、シャッター音削除等 swapやcompcacheを使う IS01 BB1.0.10 でrecovery 領域へのカーネル書き込みを行う方法ログ 最低限の環境 Terminal Emuratorのインストールや、PC上からadb使って接続できるようになってるよな! あと最低限のコマンドや権限についても知っているようならば、先に進むんだ! 逆に言うとそれが分からないとここのページの内容はちょっと厳しいかも。 基礎知識 先人様方への感謝 言わずもがな。提供された方法を利用させてもらってます。感謝の気持ちを忘れずに用いましょう。 出来る事 安全な物順。 rootの取得is01ではセキュリティが厳しく、rootを取っただけで全ての事ができるわけではない。内部のファイルを操作するとか、カーネルを焼きなおす以外の事が可能。具体的には、テザリング、フルバックアップ等が可能になる。 insmod解禁カーネルモジュールの読み込みが可能になる。msm_nand_ex.koを読む(=/system書き換えや、カーネル書き換えの)ために必要。 /systemの書き換えアドホック、CPUクロックダウン、解像度変更、プリインストールされたソフトの削除、シャッター音削除等が可能になる。 カーネルの書き換え目玉としてはswapやcompcacheが可能、等。カーネルごとに出来る事はちょっと違う。 分かりにくそうな箇所? 文鎮化:起動しない、または起動しても何もできなくなり、ただの置物=文鎮と化す事。こうなったらどうしようもない。絶対避ける事。 boot領域:is01が起動する際、一番最初に読み込みに行く場所。ここからis01は起動するので、ここが壊れると電源が入らない→文鎮化します^q^ recovery領域:is01が、設定メニューからオールリセットをする時に使用するらしい場所。絶対必要というわけでもないので、ここにカーネルを焼いておいて、rebootコマンド等で起動する方法が取られる。であるため、ここを書き換えちゃった場合はオールリセットはするなよ!絶対するなよ! オールリセット(工場出荷状態に戻す):設定から実行できるオールリセットは、/system以下は戻してはくれない。カーネルを変更した場合も同様。開発としては、そもそも変更できないように設計した部分なので、わざわざ「元に戻す」という処理を入れなかった、という所か。 各有志様のツールについて is01rooter:is01でrootを取るための作業を行ってくれるツール。BB09版と違い、rootを取ってくれる所まで。入手先:mobilehackerz氏のページから。BB10の諸君は一番下のtestっていうリンクから。 prepareとmodules_enabler_plus:中身の詳細は不明、insmodコマンドを実行可能にしてくれる。入手先:NV氏のブログから。下のmodules_enabler+から。 msm_nand_ex.ko:カーネルモジュール。insmodから読み込んで使う。読み込むと、各領域を書き換えるためのboot_wr、recovery_wr、system_wrを提供してくれる。cat /proc/mtdで確認可能。入手先:単品での提供元無し?とりあえず、mobilehackerz氏のページから、IS01 rooter ソースコード (IS01root_002proj.zip)の中にあるmsm_nand_ex.koを取り出す感じで。 recovery_kit:boot領域に仕込むためのカーネル。電源ボタンとホームボタンを押すと、recovery用メニューが動くようになる。何もしなければ、recovery領域のカーネルを起動してくれる。boot領域にこれだけ書き込んで再起動とかするなよ!絶対するなよ!入手先:NV氏のブログから。 各カーネル:基本的にはrecovery領域に書き込む。理由は、例え失敗しても普通に立ち上げればbootから起動するので、文鎮化のリスクが少ないから。recovery_kitをbootにインストールすればさらに便利に。別にそのままbootに書き込んでもいいけど、下手なモノ読み込むと一撃で文鎮化しちゃうぞ☆入手先:様々。NV氏のブログからIS01 Hacked Kernel #001、山下英孝氏のブログからcompcache可能なカーネルなど。 やった方が良い事 linuxの知識を得る がんばれ。 各領域のバックアップ やる事、やりたい事にも寄るけどきちんと取ってね! 818 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2011/01/15(土) 22 52 00 ID 7d5GvF85 [2/3] 815 神様じゃないけどrootとってbusybox入ってる状態で以下の作業しておけばいいんじゃないかな bootのイメージ # dd if=/dev/mtd/mtd0 of=/sdcard/mtd0.bin recoveryのイメージ # dd if=/dev/mtd/mtd2 of=/sdcard/mtd2.bin systemの中身 # tar cvzf /sdcard/system.tgz /system dataの中身 # tar cvzf /sdcard/data.tgz /data こっちも参照。>http //jackov.blog98.fc2.com/blog-entry-27.html ちなみに、出来たバックアップファイルを使う方法。 boot、recoveryはddで出来たファイルをそのままflash_imageで当該領域に焼きこめばOK。 tarのほうはそのまま置きなおせばOK? 具体的な方法:基礎 root化 マーケット等でSuperuserをインストール。 (rootを用いるアプリを管理してくれるソフト) こちらの一番下、testというリンクから、IS01root_simple.apkを入手。 is01にインストールして、実行。step1→強制終了→再度実行しstep2→再起動を促す表示が出るが、気にせず再度実行→step3 これでrootを取る準備が出来てるはず。後は、rootが要求された際に、Superuserが教えてくれる。 再起動の度にリセットされるので、必要であれば再度Step1,2,3が必要。 BB10ではStep3は不要という説も有り。詳細不明。 確認:Terminal Emuratorで、suのコマンドを叩いて反応があればOK。 insmod解禁 root化した状態で、prepareと、modules_enabler_plusを実行する。 こちらも通常ならば再起動毎にリセット? (busyboxが使えるようになっている事を前提とした)例: /sdcardにprepareとmodules_enabler_plusを配置した場合 $ su # cd /sdcard # ./prepare # ./modules_enabler_plus Start. Finish. Enjoy! # 確認: prepareは動作時なんのログも表示されず。 modules_enabler_plusはStart.Finish.Enjoy!と表示される。(うろ覚えなので微妙に間違ってるかも) 失敗する場合はrootを取っているか、実行方法は正しいか(カレントディレクトリからだと./prepare、./modules_enabler_plusって打つ必要がある)、 権限が付与されてるかをチェック。 /systemの書き換え root化と、insmodを可能にした状態でmsm_nand_ex.koをinsmodで読み込む。 すると/proc/mtd/mtd10に、(system_wrという名前の)変更可能な場所が出来るので、 適当なディレクトリを作って、mountすればOK。この辺の作業の詳細はよくわからん。 (busyboxが使えるようになっている事を前提とした)例: /sdcardにmsm_nand_ex.koを配置した場合 # insmod /sdcard/msm_nand_ex.ko # mkdir /system.rw # mount -o rw -t yaffs2 /dev/block/mtdblock10 /system.rw # 後は、mount先(上の例のままだと/system.rw)にあるファイルを操作。 # cd /system.rw/app # mkdir escaped_apps # mv Launcher.apk ./escaped_apps # その後、再起動すれば元の/systemの方に反映されるみたい。 カーネルの書き換え 文鎮化のリスク高。バックアップはきちんと取ること! root化と、insmodを可能にした状態で、msn_nand_ex.koをinsmodで読み込む。 /proc/mtd/mtd8にboot_wr、/proc/mtd/mtd9にrecovery_wrという名前で変更可能な場所ができる。 その後は書き換えたい方に対して、flash_imageを使ってファイルを焼きこめばOK。 flash_image [領域名] [焼きこみたいファイル] (busyboxが使えるようになっている事を前提とした)例: /sdcardに焼きたいファイルを配置した場合 # flash_image boot_wr /sdcard/[なにか].img # flash_image recovery_wr /sdcard/[なにか].img # ↑凄く乱暴な例なのでこのまま試さないように。動く確認を取らないと危険。 img以外のファイルも焼き込める。ので、ファイルを間違えないように。 確認: とりあえずrecovery領域に焼いて、reboot recoveryからテストしてみるのが吉? reboot recoveryはTerminal Emurator上からじゃ動かないので、 PC上からadbで接続した後、suしてreboot recoveryを行ったり、 AnReboot、Quick Boot (Reboot)をインストールして使う必要がある。 また、カーネルによっては、内部的にBB9に戻る事がある? 書き換え後はBB9用のis01rooterが動作したという話も。 具体的な方法:目的別 殆どは必要な操作を行った上で、こちらを参照する事でほぼ解決。→root化で可能なこと 注意点としては、直接/systemやboot領域、recovery領域を弄る事は出来ないという事。上の「/systemの書き換え」参照。 テザリング root化した状態でBarnacle Wifi Tetherを用いる。 解像度変更、またはCPUクロックダウン msm_nand_ex.koをinsmodして、書き換え可能な領域をマウント、例えば/system.rwにマウントしている場合、 /system.rw/build.propをテキストエディタなどで開いて編集した後、再起動。 または専用ツールを使う。 プリインストールされたソフト削除、シャッター音削除等 msm_nand_ex.koをinsmodして、書き換え可能な領域をマウント、例えば/system.rwにマウントしている場合、 /system.rw/app内にあるソフトを削除したり退避したりする。 シャッター音等は/system.rw/media/audio/にあるので好きなように削除なり退避。 その後再起動。 swapやcompcacheを使う msm_nand_ex.koをinsmodする。 bootを書き換えたい場合はboot_wrに、 recoveryを書き換えたい場合はrecovery_wrに対して、 swapやcompcacheが有効になっているカーネルイメージを焼きこむ。 その後再起動。 設定方法は割愛。各カーネルの作者さんのページなど参照。 IS01 BB1.0.10 でrecovery 領域へのカーネル書き込みを行う方法ログ こちらを参照→http //codepad.org/op4mI1mv ただし、現在IS01 Super Tunerの配布が終了されているため、バックアップは手動で行ってください。
https://w.atwiki.jp/auwallet/pages/6.html
au WALLETについて au WALLET(カード)とは au WALLETはKDDI、沖縄セルラーが提供する電子マネーサービスです。 そして、au WALLETカードはau WALLETのサービス提供開始に合わせて発行された、プリペイド式電子マネーカードです。 同時期に発行された兄弟カードにWebMoney Cardがあります。
https://w.atwiki.jp/is01rebuild/pages/25.html
テストを円滑にする(案) ついでにデュアルブートも可能になるかも?^^; 先ほど思いついたのですが、mount 以降を data から import できないかと…(2010/12/24 0 07) 仕様(案) /data/symroot/exec/data /data/symroot/exec/system を動作用として、切り替え用に /data/symroot/1_6_orig/data /data/symroot/1_6_orig/system /data/symroot/2_2r1_3/data 等とすると、シンボリックリンクのシンボリックリンクとかになってぐちゃぐちゃかも…^^; もしくは、NVさんのrecovery_kit 内でプログラムで data、system を init.rc に合致するよう、シンボリックリンク、リネーム。 …リネームすると再起動したときが面倒。ver.proc みたいなデータでもバージョン番号直下において管理? init.rc から import するバージョン個別onboot以降のスクリプトのコピー(もしくはリネーム) してリネームしてから、recovery領域からブート。 こうすると良いかも。ただ、バージョンをまたいだファイルコピーのターミナルでのコマンドが長くなりますが…。 コメント テスト -- (名無しさん) 2010-12-25 20 02 18 現状System領域に焼く方法がないので、1.6Systemはそっちを利用するとData領域の節約になりそうな気がします。 切り替え方法が混乱しそうですが。 -- (RO215) 2010-12-25 23 06 48 それは、言えますね。 1.6の起動の為にわざわざSymlink環境を作る必要は無いかもしれません。 1.6で何か別の事をしたい方は分かりませんが…。 -- (is01rebuild) 2010-12-26 08 46 00 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/is01next/pages/41.html
■Froyo(2.2)への道(大きな一歩編) ※RO178◆lUGXrEr3C5L氏 is01rebuild @wiki http //www44.atwiki.jp/is01rebuild/ 162 ひとまずですが、adb shell する範囲では froyo ベースに入れ替えました。 system以下の lib , bin は ok です。要するにc言語のNativeだけです。 ここまでは、ライブラリ等のアドレスが分かれば簡単ですし、Linuxの様なモノです。 ここからが、Android の dalvikvm の問題になってきます。 実のところ、dalvikvmに関しては、今から勉強するという状況です^^; 段階的に試験を行っていく方法を模索しないといけないかなと思います。 とりあえず、build.prop , init.rc の変更が済んでいないので、 これから手作業で埋めていくしかないかと踏んでます。 logcat すると、dalvikvm がエラー吐き続けるループしているので それを静めてから機能(ドライバ周り?)の話になるのではないかと。。。 IS01の画面上はAndroidロゴがでてるだけです^^; 163 現在までの道のり。覚え書き程度でスレ汚しになるかもですが…。 0.NVさんのrecovery_kit 導入 1./system を /data/system_ex/system にコピー。 2.boot.img 作成 起動時から /system を /data/system_ex/system からの シンボリックリンクにする。 ・mkbootimg.c へ仙石さんのパッチ当て ・init.rc 書き換え ・ramdisk の system 削除。 3.Android の make 149 さん、 154 fi01さんありがとうございます。 ・修正 $ANDROI_SRC/build/tools/apriori/prelinkmap.c ・修正 $ANDROI_SRC/bionic/linker/linker.h ・修正 $ANDROI_SRC/build/core/prelink-linux-arm.map 4.bin , lib 一部書き換え NVさんのrecoveryモードで試験 ・bin_my , lib_my を作って、linker と lib を転送。 export LD_LIBRARY_PATH=/data/system_ex/system/lib linkerを必要とする hello.c を作ってテスト。 linker が動く事を確認。 ・そのまま、全binを bin_my に転送してとりあえずイロイロ実行。 5.dalvikvm の移行? ・/system 以下のディレクトリ単位で ****_orig に変更。 ・make したものを転送 ・再起動 90度回転した、縦向きAndroidロゴ表示 logcat でエラーループを確認 ←いまここ ・init.rcなどなど調整…… どっかに、まとめないと自分でも忘れそう。 後で、オリジナルと diff とってちゃんとまとめます。 171 とりあえず、android2.2_r1.3でのエラーを垣間見る(?)為の パッチをまとめました。 試行錯誤してぐちゃぐちゃになってたのを repo で取り直して、 改めて、bin,lib の IS01 固有部分のアドレスを修正してみました。 ./bionic/linker/Android.mk を改変したのを忘れていて、まとめにちょっと手間取りました^^; まとめ先:パッチ情報以外は、まだいい加減です。 http //www44.atwiki.jp/is01rebuild/pages/17.html 現在は、boot.img の init.rc symlink system の /system/build.prop の改変作業を行っています。 何処でエラー出しているのか大体つかめてきましたので、 とりあえず、画面だけでも出したいですね。 system パーティションに書くのは現在では危険ですので、 systemすげ替え環境で起動するようになってから、すげ替え先の ライブラリ等を入れ替えていくのが良いかと思います。 JN-DK01で froyo が動いてるという情報がありますね。 IS01 と JN-DK01 のメモリマップが同様ならば、パッチ情報も どこかにあるのかも知れませんが見つけられませんでした。 おそらく、似たような変更をしているのだと思いますが…。 そしてついに... Android2.2_r1.3 起動成功 (2010/12/23 05 27) 174 Android2.2_r1.3+(一部is01の1.6)、起動しました。 /data /system 共に symlink 環境です。 1.6の bin、lib に 2.2_r1.3 のファイルを上書き。 init.rc 試行錯誤…。。。。もう、どれが有効だったか分からない。 とりあえず画面は出ています。 175 カーネルはデフォルト(2.6.29) 現状の有効機能。 ・adb,logcat…OK ・USBデバッグのandroid側での認識…OK ・画面…OK 全画面表示。 ・タッチパネル…OK ・キーボード…OK(キー配置は英語?記号は愛嬌。要調整) sleep、home、←、menu…OK ・バイブ…OK ロック解除時に動きました。 ・トラックボール…OK ・充電認識…OK ・日本語表示…OK ドライバ、カーネルその他、要調整でしょう。 ・Wi-Fi…NG ・Bluetooth…NG ・SOUND…NG ・カメラ…NG ・SD CARD…NG ・画面輝度調整…NG ・絵文字…NG ・3G…NG(未確認) 不明 ・GPS ・その他イロイロNG ・現状、logcatにエラー吐きまくり。 ・日本語入力onの仕方が分からない。何かIME入ってるの?^^; とりあえず、画面が出て、ちょっと操作できてラッキー程度デス。 もっさろいど。 Android1.6もよく分かってないのに、無理矢理2.2にしたので、 どこから調整すべきか…悩みますが、まずはWi-Fiだろうと思います。 後で、init.rc アップします。 176 175 っついに、やりましたね!!! 177 175 おお!ついにやりましたね! 178 扉は開かれた。 179 キター!! ■Froyo(2.2)への道(インストーラー編) ※NV◆2DWoI42Bv. 氏 Android(Froyo) for IS01 http //www.megaupload.com/?d=BYEJWM6U 376 NV氏のfloyoでUSBデバッグできた方いらっしゃいますか 設定→アプリケーション→開発USBデバッグを有効にしていますが、 PCでもIS01の方でも双方を認識しておらず、adb shellが使えません。 PCのOSはUbuntu 10.10です。 379 ・BusyBoxへのパスを正しく設定していない ・root shellでinstall.shを実行しない ・カレントディレクトリが/dataでない ・パッケージファイルやイメージファイルを置いていない ・/dataの空き領域が不足している の事項に対して、チェックを行うシェルスクリプトを作成しました。 最終チェック中なので、問題が無いようだったら公開します。 しかし、 ・環境に応じてflashするパーティションの名前を変えていない に対しては未対策です。 これについては、NANDロックがあるので特に問題になることはありません。 インストーラのログ。 http //codepad.org/InTpShZl 376 qxdm_enableをいじってみるといいかもしれません。 387 エラーチェックを付けたバージョンをアップしました。 http //www.megaupload.com/?d=BYEJWM6U IS01 Super Tuner、recovery_kit, Android(Froyo) for IS01の最新版以外のファイルについては、 パスワードを付けてダウンロードできなくしました。 旧バージョンに御用のある方は連絡を。 ■Froyo(2.2)への道(Flash10.1&Wifi作動編) ※NV◆2DWoI42Bv. 氏 nvsofts Froyoの無線LAN対応、GUIもうまくいきました! http //mobile.twitter.com/nvsofts/status/22567270349803520 nvsofts IS01が未来へと近づいた瞬間 http //yfrog.com/h7gxnp http //mobile.twitter.com/nvsofts/status/22567729265377280 nvsofts Flash Player 10.1動いた http //yfrog.com/h0fjgp http //mobile.twitter.com/nvsofts/status/22569649933656064 nvsofts ニコ動も一応いけます http //yfrog.com/h8dy6p http //mobile.twitter.com/nvsofts/status/22571757332340736 ■Froyo(2.2)への道(デュアルタッチ他編) ※RO178◆lUGXrEr3C5L氏 588 IS01 Android2.2 froyo にてデュアルタッチ(疑似)に対応させました。 http //www.youtube.com/watch?v=wyEenCaxBzQ 577 2.3で画面横向きに成功とのこと!嬉しいですね。 今後、どちらのバージョンに軸足を置くべきか悩みます。 591 ニコ動見れてるのは感度的だわ いやぁーすげぇ 535 ニコ生見られますね。タイムシフト視聴もOK。 ■Froyo(2.2)への道 (その他) 88 froyoでメモリの空確認したけど、1.6より空いてる systray monitorによると起動時に60Mぐらい空いてる あとアプリのインストール&アンインストールが結構速い 画面描画とWiFi改善すればかなり使えるかも ■Froyo(2.2)への道1(失敗編) 109 Froyo登頂失敗。 SystemとRecovery書き戻しても復旧せず。 凍死寸前。まだだ!まだ手はあるはずだ! 110 今はどこまで行ったの? Froyo入れようとして失敗したの? 111 とりあえず素でどうなるか試そうとして、 カーネルとシステムをビルド、RecoveryとSystemに導入 (NV氏のツール導入済み)→失敗(当然) バックアップしておいたSystemと、素のBootを入れるも RecoveryブートではISロゴでスタック。RecoveryのBootは機能しているようで、 またRecovery_Kitのメニューはでるので、 まぁ、なんとかなるでしょうが・・・ Systemは単純にFlash_Imageで書き戻しただけじゃだめなのかな・・・? 112 ていうかdalvik-cacheとかすら知らなそうな・・・ 113 111 Systemは単純にFlash_Imageで書き戻しただけじゃだめなのかな・・・? 大丈夫と思います。 /data/dalvik-cacheや/data/data等がfroyo等別バージョンのAndroidのものが はいっていると、起動しない可能性は十分あるので一度/data/data, /data/dalvik-cacheは 消したらよいかと思います。ユーザーid(app id)もあわないでしょうし。 114 111 そのビルドだけど、PCはどの環境ですか? 115 他機種(まあこれでも同じとは思うけど)1.6から2.2に上げる時は残るゴミをきっちり消さないと動かない事が多かったよ 116 114 Ubuntu 10.10をMacMini(Intel)に入れてます。 117 ISロゴでループならカーネルの問題くさいから起動は無理そうな気がする 118 113 ありがとうございます。 そのあたり、再度チェックしてみます。 115 ごみ問題は知ってたけど、とりあえず入れずにはいられなかったという・・・ 120 117 ループじゃないです。停止です。 リブートするとNV氏のRecoveryKItが作動します。 ちょうど、Android ロゴが出る直前で止まってるような、そんな感じですね。 121 111 116 ソースはどのAndroidでしたか?JN-DK01? 123 121 JN-DK01のをとりあえず実験ということで突っ込んでみました。 カーネルだけにしておけばよかったですね・・・
https://w.atwiki.jp/is01next/pages/15.html
■insmod解禁 http //codepad.org/LteMrcnv IS01のmodules_disabledを0にするためのカーネルモジュール http //nsft.108shiki.com/soft/modules_enabler_v100.zip v1.10によるLSM無効化を使って/systemに直接unlockされたNANDをマウントするときの記録 http //codepad.org/NjEmAmj2 modules_enabler v1.10 LSM無効化 http //nsft.108shiki.com/soft/modules_enabler_v110.zip 768 insmodができない理由を調べてみた どうやら、module_disableが1になってるかららしい 0から1にすることしかできないから、0に戻すのは難しいかと kernel/module.cとかkernel/sysctl.cとかに書いてある 774 768 ローダブルモジュール類不可? 775 774 /init.rcで/proc/sys/kernel/modules_disabledを1にするように設定されてる 778 SELinuxでもはいってんのかこいつは 780 778 もっとえげつないDeckard LSMなる物がkernel.tar.gz/security/に入ってる DeckardってのはたぶんIS01の内部名。Nexus 6を追ったブレードランナーの名前 431 twitterより転載。 @nvsofts insmod解禁 http //codepad.org/LteMrcnv #is01 @nvsofts #IS01 のmodules_disabledを0にするためのカーネルモジュール http //nsft.108shiki.com/soft/modules_enabler_v100.zip 460 DECKARD LSMの無効化はモジュール作って こんな感じでできるかな? static struct security_operations disable_ops; security_fixup_ops( disable_ops); security_ops = disable_ops; security_fixup_opsは/proc/kallsymsで分かるし、 あとはsecurity_opsのアドレス探せば出来るよね? 467 Twitterから @nvsofts modules_enabler v1.10によるLSM無効化を使って/systemに直接unlockされたNANDをマウントするときの記録 http //codepad.org/NjEmAmj2 #IS01 @nvsofts modules_enabler v1.10 LSM無効化を追加 http //nsft.108shiki.com/soft/modules_enabler_v110.zip @nvsofts #IS01 のLSM外せた!!!!! ■insmod+が同梱されたカーネル:パスはdeckard http //uploading.com/files/faff9af4/rachael-0.0.beta.2.7z/ http //uploading.com/files/m64ma8db/rachael-0.0.beta.2-src.zip/ 371 ./insmod+ -f rachael.koで普通にロードできた。 何だこれ。 377 素の01.00.07なんだが、 /sh_tmp # lsmod unifi_sdio 294368 0 - Live 0x7f000000 /sh_tmp # cat /proc/sys/kernel/modules_disabled 1 /sh_tmp # ./insmod+ -f rachael.ko force loading... insmod rachael.ko addr=0x800a206c /sh_tmp # lsmod rachael 11660 0 - Live 0x7f0aa000 unifi_sdio 294368 0 - Live 0x7f000000 /sh_tmp # cat /proc/sys/kernel/modules_disabled 1 何かおかしくね? 378 377 insmod+使うと、modules_disabledが1でもロードできるっぽい。 どうやってやってるかは知らないけど。 380 378 レスさんくすです。 俺の勘違いじゃなくて良かった。 381 いや、良かないか。新手の罠か? 382 中身を覗いてみたけど、なんかの脆弱性を突いてる気がする。 383 しれっとすごいコードがリリースされてるんだな…
https://w.atwiki.jp/is01next/pages/36.html
■メモリスワップアプリ Swapper for Root users - Elviss Kuštans http //jp.androlib.com/android.application.lv-n3o-swapper-qFA.aspx Swapper 2 (for Root users) - Elviss Kuštans http //m.jp.androlib.com/android.application.lv-n3o-swapper2-EADD.aspx Swapper for Root - Dario Azatoth Lipari @AzaSoft http //m.jp.androlib.com/android.application.org-azasoft-free-swapper-jizBm.aspx ■手動でswapon IS01 root化と諸々の作業メモ « コムギドットネット http //komugi.net/archives/2010/12/06205920.php ※「5.swapする」を参照 ■試行錯誤 273 swap使ってる人って結局その後安定してる? 274 273 NVさんのカーネル+Swapperで安定してる。 277 274 Swapper1だとやっぱり安定するのかな ありがとう、試してみよう 279 274 Swapperで検索すると、Elviss kustansのとAzaSoftのあるけど、どっち? 281 279 Elviss Kustansのやつ 280 273 結局 swapper2 使うのをやめて、 boot.sh から is01 rooter 実行時にswaponするようにした 場所は /data/local/tmp/swapfile.swp できればSDカードにしたい所だけど・・・。今のところ安定。 swap設定ツールは三種類あるようだけど、どれもうまくいかなかったなあ。 ・Swapper for Root users ・Swapper 2 (for Root users) ・Swapper for Root 上の二つは同系列みたい。 282 280 本体に作るとは勇気あるな… 286 281のSwapperで無事Swap作成完了 ブラウザから他のアプリに移り、もう一度ブラウザに移ると再読込するっていうクソ現象が無くなった これは大きいなー 285 録画可能ワンセグ様が常駐してるからって話じゃないっけ 293 うーん放っておいたらフリーズした パーティション切らないとダメなのかなぁ 288 ワンセグ殺すと、/proc/meminfoで見られる実質的な空きメモリが70MB超えるしね。 (実質的な空きメモリ=MemFree+Inactive) 291 282 どうせ何らかの形で内部フラッシュに書き込みしちゃうわけだし、IS01の二台目もあるし自己責任で。 yaffs2ってのがどこまでウェアレベリングしてるのかわからんけど 内部フラッシュにワンセグ録画出来るくらいだから何とかなるだろと。他の人には薦めません。 SDカードにlinux_swapパーティション切ってそっちをswapにしたいんだけど IS01でどうやればマウント出来るのかぜんぜん見当がつきません 295 291 external_grub.tar.gzの中調べたらどうでしょうかね。 300 普通に考えて出来ないわけがなかった Swapper2でもやはりフリーズ 303 Swapperはazasoftでいいと思うぞ 今まで一回もfreezeしたことない 305 300 スワップファイルの容量かえてみたり、Swapperの設定かえたりしたけどこちらもアウト。 EZメール受信のためにrooter切ったり、メモリ管理系のソフト使用時に固まりやすい希ガス。 314 303 入れてみたけど設定後freeコマンド叩いてもスワップ有効になってない。再起動しても同じ。 カーネルは入れ替え済み。 318 314 一度スワップ有効のチェック外してアプリ終了して、もういちど有効にして 「swapperがスーパーユーザ権限を~」って出たら多分いけるはず・・・ 323 318 1. アプリを立ち上げて有効にして容量セットしてSave 2. freeで確認すると出来てない 3. アプリを立ち上げて無効にしてSave 4. アプリを立ち上げて有効にしてSave 5. freeでSwapが出来ていることを確認 仰るとおりこれで出来たよ!ありがとう! 326 318 何度かやってダメだったけど、一度サイズを変更して、その手順をやったら有効になった。ありがとう。 328 326 サクサク動いて快適と喜んでいたのもつかの間、TkMixiViewer+でコメント書いてたら日本語変換の途中でハングってしまったorz 332 328 高負荷かけても平気だったりする割に、たいした事してない時にハングするよね。 フリーズ多発の報告がある一方で安定稼働の報告もあるし、アプリの環境か バージョン固有の問題でもあるのかな? 電池外した所の商品コードはSHI01MKX(外箱青シールのX印はいってるやつ)で、 01.00.09で仙石カーネル、nvsoftカーネルともに不意にフリーズ・・・ 335 swapでフリーズしてないって人は、実はswapon出来てなかったというオチじゃないかと思ってる swapper使って free や cat /proc/meminfo で確認したらswapが0だった事もあったし。 /data/local/tmp/swapfile.swp に作ったスワップは半日経過後も不具合なし。 ただ、今 free して確認したらもう32MB全部埋まってた・・・ 345 SDにswap置くとフリーズする気がする。 /data下だと問題ないような。 フラッシュの書き換え回数気にする人は、やめた方がいいけど。 SDのパテ切ってswapは、カーネル再構築しないと駄目なんかな。 346 報告 昨日本体に置いた32MBのスワップが半日で埋まったので、今度は64MBに変えてみたが 朝起きてみたら、再起動して最初のホーム画面に戻ってた SDカードの時のようにハングアップはしてなかったので、スワップとは無関係かもしれないが。 32MBにスワップサイズ戻して再度検証してみる 348 ブート時にSWAP仕込みたいんだけど、どこに記述すればいいんだろう。 それっぽいところが見つからないんだ。 349 昨日の午後5時ぐらいからsdに128MBでswapしてるけど、フリーズしてないよ。 free投げてもswap動いてるみたいだし、LISMOのバックグラウンド再生も出来てるから特に問題なさそうなんだけど、なんで落ちる人と落ちない人が居るんだろ? 353 SDカードにswapファイル作る場合、swappiness10ぐらいにしとくと 安定するかも。 echo 10 /proc/sys/vm/swappiness 355 348 最初からswap設定する方法については、コムギドットネットさんでまとめられていたよ IS01 root化と諸々の作業メモ - コムギドットネット ttp //komugi.net/archives/2010/12/06205920.php 357 swapどのツールでやってもどのサイズでやってもどっかしらで問題発生するな SunのClass2の16GBなんだが動く人はClass早かったりするのかな ・気づいたら勝手に再起動してる ・何かのツール使用中にフリーズ(Titaniumとか) ・ほっといて見たらフリーズ ・閉じてスリープ入ったら戻ってこない 一応どれもリセットボタン押すだけで問題はなさそうなんだけど、swapper2でEnableにならなくなった 今はAzasoftのswapperで作れてる 359 357 ・気づいたら勝手に再起動してる 俺のところはswap止めても割と頻繁になる 360 誤りがあるかもしれないけど、気がついたこと。 評価用に入ってたSDカードにmmcblk0p1をバックアップしてたらIOエラーとなり その後は/sdcardを読み書きするとIOエラーになった。 リブートしたら正常に使える様になり再度やったらちゃんと書き込めた。 swapが使えなくなるのってswap自体と言うよりsdカードのアクセスの問題かも。 あと、ケータイアップデート後の「再起動」は通常のリブートとは別みたい。 「後で再起動」にして電源切って起動しなおしたりリカバリーモードにしても更新されなかった。 再度ケータイアップデートをやり直したら(再度ダウンロード後)更新出来た。 URA_MODEやfastbootについては試していない。(当時知らなかったので) ケータイアップデート再起動前の時点でmtd1(cache)とmtd4(ipl)は書き換えられている模様。 374 Swapでフリーズ頻発の報告よくみるが、コマンドド素人の自分のは全くフリーズしない。仙石さんの参考にやっただけで、swapperとか使ってない。 1背具バックグラウンドにしてもサクサク動く。swaponなってないのはあり得ないほど体感速度違う。皆と何が違うんだろ? 378 そいえばデフォのswappinessっていくつなの?60? cat /proc/sys/vm/swappiness 380 # cat /proc/sys/vm/swappiness 60 だった。 382 380 おお、ありがと 384 60はスワップし過ぎな気がするけど 386 Swap256MB作ってみたら3時間ほど触ったり放置したりしてもフリーズ無し 意図的にフリーズ起こすことは今のところできてないし、単純にI/Oが間に合わない状況起こると死ぬとかかな そうなるとどんなSDカードでもClass2程度の性能しか出せないIS01の性能がネックになるのか… 387 秋葉いったら上海問屋の店舗なくなってた。貴重な昼飯時間が orz 2010年2月で実店舗撤退したらしい。 仕方ないのであきばおーで SILICON POWER の class6 4GB \999 買ってきた。 あとで CrystalDiskMark かけて、IS01純正との比較画像アップするわ。 389 383,386 IS01で使うとSDの性能でないって話はどこからきたの? 393 389 自分でSDCardSpeedTestでベンチ取り比べてみたらわかる 398 とりあえずベンチ結果 http //182.163.88.124/sd-bench.png 4k random の値が納得いかない部分がありますが、 ベンチに詳しくないのですが条件変えて何回もやってみたほうがいいのでしょうか? 393 これからやってみます。 412 SD AndroidApp 上でのベンチ結果 SDCardSpeedTest IS01純正 SANDISK Write 2MB/s Read 2MB/s SILICONPOWER Write 2MB/s Read 2MB/s Disk Benchmark (Data size 100MB, Buffer size 4KB) IS01純正 SANDISK Write 2.80MB/s, Read 3.33MB/s SILICONPOWER Write 2.72MB/s, Read 3.43MB/s 結果:速いSDを用意しても意味が無いのかな。 最後にゴミデータだが CrystalDiskMark を 1000MBにしてやったもの(画像上部) IS01 上に刺した SD カードを USB 接続した PC 上にマウントした状態でのベンチ画像 100MB (画像下部) http //182.163.88.124/sd-bench1000.png 413 swapの件だが、クラス2からクラス4に変えたらフリーズ無くなった。 459 追伸・swapでフリーズした・フリーズしなかったというのは使ったmicroSDとかを報告しあい、 蓄積していったら意味があるんじゃないかと思う。 460 459 それ賛成。 MicroSDの メーカ クラス 容量 できたら型番 swapの可否 備考 くらいかな? 463 そんなの報告しなくても おそらく パーティション切ってないだけのアホ 466 ソース見た感じだと、SDのパーティション切っても認識しないと思うけど違うか? 469 466 SDにFAT32/ext3/linux_swap切ってるけど、後ろの2つは認識してません SDカードは /dev/block/stheno になってるけど、これ他のAndroid環境とは違いますよね? 472 469 sthenoの本体はカーネルソースの drivers/stheno/stheno_kernel.c にあって、 IS01の独自部分の一つ(コードがシャープ製) 複数パーティションに対応してないっぽいから、切っても認識されないかと 621 最終的にはタップのみで切り替えられるようにするswap設定方法をまとめて見た。 http //twit.dainasu.com/blog/wp/ なんか間違ってたら指摘くださいな。 623 621 乙です 自分は is01rooter の boot.sh 書き換えて、途中に swapon 入れてますが これだと初回実行の時に is01rooter のウィジェットがちゃんと動きませんでした 最後まで実行されてるみたいなんだけど、ウィジェットの表示が灰色から緑にならず灰色のまま。 いずれちゃんと is01rooter のソース見てみるつもり 630 621 http //twitter.com/MobileHackerz/status/13148226941095937 1)の参考URLが違わないか なんでわざわざ毎回 /system をrwマウントするのか。こええよ boot.sh書き換えるならswap作成もここでやればいいのに など、なんかいろいろ突っ込みたくなった。 663 630 亀レススマン。今家に帰った。 1)のURLはリンク先自体はあってたがリンクのテキストが誤ってたので直した。 Thx busyboxは言われてみればそうだな。 考慮が足りなかった。 毎回boot.shでマウントしてるのは俺自身が再起動したときくらいしかrooter叩かないから。 swapをそこでやらないのは通常bootしたときにswapでこけてロード画面でとまるから。 といった具合。 ま、要するに自分で使いやすいようにやってるので参考程度に考えてくれればよろしいかと。 いくらでも他の方法はあるし。 671 実際のとこswapって中につくって大丈夫なの? 673 671 以前はフラッシュメモリの書換回数に神経質だったけど ttp //botchyworld.iinaa.net/ssd.htm これ読んでからどうでもよくなった。 SDにスワップさせれば壊れても取り換えられるってメリットはあるけど、 泥井戸1.6なスマホなんて使い倒しても5年。壊れる前に機種変してるな~。 678 671 大丈夫かは保障しないが、 いまのところ中(internalNAND)に SWAP 128MB 作って丸2日(50時間)動いてる。 で、少し無茶させてみての考察なんだが、 1.SWAP を使い切るまでアプリを常駐させまくる。 2.常駐させたアプリを全部落として free で確認する。 →期待した動作:SWAP の使用状�はそのままで物理メモリに空きが出来る ところが、 SWAP の使用量は20MBまで減って、通常メモリの空きはほとんど作られなかった。 自分の拙い記憶では、1度スワップアウトしたメモリデータは、 使われない限りスワップ側に退避されたままだったと思うんだが、 これでいくと、使ってないワンセグ類がすぐにメモリを確保している(呼び出されている)感じがある。 そのあと実際にワンセグを起動してみたが、free でメモリの状況に変化は無かった → 既に SWAP 側にワンセグのメモリ確保は乗っていない。(物理側にある) で? って話だ。 680 でも中の /data は ext3 なんだよな。 /sqlite_journals は ytffs か何かだったから、swap はコッチの方がイイかもしれんぞ。 682 swap を作る場所は、 IS01rooter を入れているなら /sqlite_journals/is01root/boot.sh だな。 if [ ! -e /data/local/tmp/swapfile.swp ]; then dd if=/dev/zero of=/data/local/tmp/swapfile.swp bs=1048576 count=64 fi mkswap /data/local/tmp/swapfile.swp swapon /data/local/tmp/swapfile.swp こういうふうに追記すれば、IS01rooter で su を有効化するのと同時に swap が ON になる。 autoexec.sh でも良いけど、adb push で送ったあと実行権限を付け忘れると boot.sh より厄介なことになる。 11 というかこれメモリ空けてもワンセグとか何らかのアプリが残り25MBくらいになるまで勝手に奪うようになってない? 13 11 cat /proc/meminfo した時の MemFree と Inactive の合計が実質の空きメモリらしいよ プロセス見てると次から次へ起動しては死んでいくから 何かしらアプリがインストールされてる限りは minfree の最大値 6144 (24MB) 以上の空きメモリ確保するのは難しいんじゃないかと。 187 昔メモリが高価だった頃、RAM Doublerといってメモリを圧縮して空きメモリを増やす技術があったけど、androidではそいうことはできないのかね。 swapよりも安全なような気がしないわけじゃない。 188 187 compcacheがある 190 188 お、そうなんだ。ちょっと調べてみます。
https://w.atwiki.jp/is01rebuild/pages/34.html
Android の画面上で無線LANを有効にするには…? このページは、無線LANを有効にするからの続きのページです。 wpa_supplicant のクライアントとして Android を認識させる wrapper の役割になります。 下記を編集… $ANDROID_SRC/hardware/libhardware_legacy/wifi/wifi.c する…、のだが…、 これをとりあえず動くようにするだけで…、結構かかりました。。。 しかも、ソースコードはデバッグ情報出力でズタボロ。。。 Android の一次情報をしっかり読んでいれば分かるんでしょうが、 エラー&トライのような感じで。。。Androidの wext がドライバに要求するコマンドを 実ドライバにバイパスしないといけないのだが、面倒なので無視する事にした。 後で、wext の要求を見てどうするか考える。 そうして出来たのが下記コード…。もう、きっちり型変換はしてないし、 usleepはいい加減な値だし、driver の有効化の部分は一応チェックは入れたがまだ甘いし。 本来は Android.mk で指定しなければならない、定数などはハードコーディングしているし…。 文字列ポインタや文字数は少なければ安全だろうと…いうことで。 本ページサイトの情報は全て無保証であるがままです。 かなり不安定ですので、そのまま実用には耐えません。 それなりに使えるようになっています、デバッグでは無いときはlog出力コメントアウトするのがオススメ。 Ver.0.0.2α 初期公開から更新しました。 2010/12/31 13 20) Ver.0.0.3α_20110101_00 若干、安定化させました (2011/01/01 02 18) 無効化しているコマンドですが、本来的には reply ポインタに文字列を返さなければいけません。 そこに、len=0にしてリターンしていますが、上位層及び下位層の影響範囲を調べていません。 無線LANアクセスポイントの新規追加できません。(1.6の時に接続していた先は大丈夫と思います) データ通信速度取得できません。 無線LAN RSSI 取得出来ません。 Ver.0.0.4α_20110105_00 IS01向けwpa_supplicant GPLソースマージ。コマンド無視部分をコメントアウト (2011/01/05 19 05) IS01向けGPLソースの external/wpa_supplicant/driver_wext.c を利用する事で、下記コードの wifi_send_command() からswitch文をごっそり削除できます。RSSIの取得には対応してないようなので、後で検討します。下記コードはIS01向けGPLソースの external/wpa_supplicant/driver_wext.c をマージした場合の wifi.c になります。マージしてない場合は、switch文部分のコメント一連のコメントを外してして下さい。 fi01氏よりの情報にてGUIにおいてもRSSIの取得が可能になりました。 無線LANアクセスポイントの新規追加、検証していません。 データ通信速度取得できるようになりました。 無線LAN RSSI 取得できるようになりました。 /* * Copyright 2008, The Android Open Source Project * Copyright 2011, RO178 is01rebuid * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http //www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include stdlib.h #include fcntl.h #include errno.h #include string.h #include "hardware_legacy/wifi.h" #include "libwpa_client/wpa_ctrl.h" #define LOG_TAG "WifiHW" #include "cutils/log.h" #include "cutils/memory.h" #include "cutils/misc.h" #include "cutils/properties.h" #include "private/android_filesystem_config.h" #ifdef HAVE_LIBC_SYSTEM_PROPERTIES #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ #include sys/_system_properties.h #endif static struct wpa_ctrl *ctrl_conn; static struct wpa_ctrl *monitor_conn; extern int do_dhcp(); extern int ifc_init(); extern void ifc_close(); extern char *dhcp_lasterror(); extern void get_dhcp_info(); extern int init_module(void *, unsigned long, const char *); extern int delete_module(const char *, unsigned int); static char iface[PROPERTY_VALUE_MAX]; // TODO use new ANDROID_SOCKET mechanism, once support for multiple // sockets is in #ifndef WIFI_DRIVER_MODULE_PATH #define WIFI_DRIVER_MODULE_PATH "/system/lib/modules/wlan.ko" #endif #ifndef WIFI_DRIVER_MODULE_NAME #define WIFI_DRIVER_MODULE_NAME "wlan" #endif #ifndef WIFI_DRIVER_MODULE_ARG #define WIFI_DRIVER_MODULE_ARG "" #endif #ifndef WIFI_FIRMWARE_LOADER #define WIFI_FIRMWARE_LOADER"" #endif #define WIFI_TEST_INTERFACE"sta" #define WIFI_DRIVER_LOADER_DELAY2000000 static const char WLAN0_DEVICE[] = "/sys/devices/platform/msm_sdcc.1/mmc_host/mmc1/mmc1 0001/mmc1 0001 1/net/wlan0/wireless/status"; // "/sys/class/net/wlan0"; static const char IFACE_DIR[] = "/data/misc/wifi/sockets"; //"/data/system/wpa_supplicant"; static const char DRIVER_MODULE_NAME[] = "unifi_sdio.ko"; //WIFI_DRIVER_MODULE_NAME; static const char DRIVER_MODULE_TAG[] = "unifi_sdio.ko"; // WIFI_DRIVER_MODULE_NAME; static const char DRIVER_MODULE_PATH[] = "/system/lib/modules/unifi_sdio.ko"; //WIFI_DRIVER_MODULE_PATH; static const char DRIVER_MODULE_ARG[] = ""; //WIFI_DRIVER_MODULE_ARG; static const char FIRMWARE_LOADER[] = ""; //WIFI_FIRMWARE_LOADER; static const char DRIVER_PROP_NAME[] = "wlan.driver.status"; static const char SUPPLICANT_NAME[] = "wpa_supplicant"; static const char SUPP_PROP_NAME[] = "init.svc.wpa_supplicant"; static const char SUPP_CONFIG_TEMPLATE[]= "/system/etc/wifi/wpa_supplicant.conf"; static const char SUPP_CONFIG_FILE[] = "/data/misc/wifi/wpa_supplicant.conf"; static const char MODULE_FILE[] = "/proc/modules"; static int insmod(const char *filename, const char *args) { LOGD( "wifi %s() function in", __FUNCTION__ ); /* void *module; unsigned int size; int ret; module = load_file(filename, size); if (!module) return -1; ret = init_module(module, size, args); free(module); return ret; */ int ret; char command[]="echo 1 /sys/devices/platform/bwpm/wifi"; char command2[]="echo 1 /sys/bus/platform/drivers/msm_sdcc/msm_sdcc.1/polling"; property_set( "ctl.stop" , "dhcpcd" ); sched_yield(); //property_set( "ctl.stop " , "wpa_supplicant" ); //sched_yield(); ret=system(command); LOGD( "wifi %s() %s ret=%d" , __FUNCTION__ , command ,ret); sched_yield(); usleep(100000); ret=system(command2); sched_yield(); LOGD( "wifi %s() %s ret=%d" , __FUNCTION__ , command2 , ret ); int maxtry = 10; char text[256]; while (maxtry-- 0) { if (access( WLAN0_DEVICE , R_OK ) == 0) { FILE *fp; if ((fp = fopen( WLAN0_DEVICE , "r")) != NULL ) { fgets(text, 256, fp); LOGV( "wifi %s() wlan0 status=%s" , __FUNCTION__ , text ); if ( strncmp( text , "0x0" , 3 ) == 0) { LOGD( "wifi %s() wlan0 enabled!" , __FUNCTION__ ); return 0; } fclose(fp); } } else LOGV( "wifi %s() wait for enable wlan0 ...." , __FUNCTION__ ); usleep(500000); } return -1; } static int rmmod(const char *modname) { LOGD( "wifi %s() function in", __FUNCTION__ ); /* int ret = -1; int maxtry = 10; while (maxtry-- 0) { ret = delete_module(modname, O_NONBLOCK | O_EXCL); if (ret 0 errno == EAGAIN) usleep(500000); else break; } */ int ret=-1; char command[]="echo 0 /sys/devices/platform/bwpm/wifi"; char command2[]="echo 0 /sys/bus/platform/drivers/msm_sdcc/msm_sdcc.1/polling"; ret=system(command); LOGD( "wifi %s() %s ret=%d" , __FUNCTION__ , command ,ret); usleep(200000); ret=system(command2); LOGD( "wifi %s() %s ret=%d" , __FUNCTION__ , command2 , ret ); int maxtry = 50; while (maxtry-- 0) { if ( (ret=access( WLAN0_DEVICE , R_OK )) == 0) { LOGD( "wifi %s() wait for disable wlan0 ...." , __FUNCTION__ ); usleep(100000); } else { LOGD("wifi %s() wlan0 driver Disabled! return " , __FUNCTION__ ); return 0; } } if (ret == 0) LOGE("wifi %s() Unable to disable wlan0 driver return 0;", __FUNCTION__); return -1; } int do_dhcp_request(int *ipaddr, int *gateway, int *mask, int *dns1, int *dns2, int *server, int *lease) { LOGD( "wifi %s() function in", __FUNCTION__ ); /* For test driver, always report success */ if (strcmp(iface, WIFI_TEST_INTERFACE) == 0) return 0; if (ifc_init() 0) return -1; LOGD( "wifi %s() sleep 1sec...." , __FUNCTION__ ); usleep(1000000); if (do_dhcp(iface) 0) { ifc_close(); return -1; } ifc_close(); get_dhcp_info(ipaddr, gateway, mask, dns1, dns2, server, lease); return 0; } const char *get_dhcp_error_string() { LOGD( "wifi %s() function in", __FUNCTION__ ); return dhcp_lasterror(); } static int check_driver_loaded() { char driver_status[PROPERTY_VALUE_MAX]; FILE *proc; char line[sizeof(DRIVER_MODULE_TAG)+10]; LOGD( "wifi %s() function in", __FUNCTION__ ); if (!property_get(DRIVER_PROP_NAME, driver_status, NULL) || strcmp(driver_status, "ok") != 0) { LOGD( "wifi %s() driver not loaded.", __FUNCTION__ ); return 0; /* driver not loaded */ } /* * If the property says the driver is loaded, check to * make sure that the property setting isn t just left * over from a previous manual shutdown or a runtime * crash. */ if ((proc = fopen(MODULE_FILE, "r")) == NULL) { LOGW("wifi %s() Could not open %s %s", __FUNCTION__ , MODULE_FILE, strerror(errno)); LOGW("wifi %s() property_set( \"%s\" , \"unloaded\");", __FUNCTION__ , DRIVER_PROP_NAME ); property_set(DRIVER_PROP_NAME, "unloaded"); return 0; } while ((fgets(line, sizeof(line), proc)) != NULL) { if (strncmp(line, DRIVER_MODULE_TAG, strlen(DRIVER_MODULE_TAG)) == 0) { fclose(proc); LOGD( "wifi %s() driver loaded", __FUNCTION__ ); return 1; } } fclose(proc); LOGD( "wifi %s() property_set( \"%s\" , \"unloaded\");",__FUNCTION__ , DRIVER_PROP_NAME ); property_set(DRIVER_PROP_NAME, "unloaded"); return 0; } int wifi_load_driver() { LOGD( "wifi %s() function in", __FUNCTION__ ); char driver_status[PROPERTY_VALUE_MAX]; int count = 100; /* wait at most 20 seconds for completion */ if (check_driver_loaded()) { return 0; } LOGD( "wifi %s() check driver .... true.",__FUNCTION__); if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) 0) { LOGE( "wifi %s() try insmod %s %s ....false,",__FUNCTION__,DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); return -1; } LOGD( "wifi %s() try insmod %s %s ....true.",__FUNCTION__,DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); if (strcmp(FIRMWARE_LOADER,"") == 0) { LOGD( "wifi %s() none FIRMWARE_LOADER." , __FUNCTION__); LOGD( "wifi %s() sleep %dusec...." , __FUNCTION__ , WIFI_DRIVER_LOADER_DELAY ); usleep(WIFI_DRIVER_LOADER_DELAY); LOGD( "wifi %s() property_set( \"%s\", \"ok\" ) ." , DRIVER_PROP_NAME ,__FUNCTION__); property_set(DRIVER_PROP_NAME, "ok"); } else { LOGD( "wifi %s() property_set( ctl.start, %s )",__FUNCTION__ , FIRMWARE_LOADER ); property_set("ctl.start", FIRMWARE_LOADER); } sched_yield(); while (count-- 0) { usleep(200000); if (property_get(DRIVER_PROP_NAME, driver_status, NULL)) { if (strcmp(driver_status, "ok") == 0) { LOGD( "wifi %s() driver status ... true",__FUNCTION__); return 0; } else if (strcmp(DRIVER_PROP_NAME, "failed") == 0) { wifi_unload_driver(); LOGD( "wifi %s() call driver unload",__FUNCTION__); return -1; } } } property_set(DRIVER_PROP_NAME, "timeout"); wifi_unload_driver(); return -1; } int wifi_unload_driver() { LOGD( "wifi %s() function in", __FUNCTION__ ); int count = 20; /* wait at most 10 seconds for completion */ if (rmmod(DRIVER_MODULE_NAME) == 0) { while (count-- 0) { if (!check_driver_loaded()) break; usleep(500000); } if (count) { return 0; } return -1; } else return -1; return 0; } int ensure_config_file_exists() { LOGD( "wifi %s() function in", __FUNCTION__ ); char buf[2048]; int srcfd, destfd; int nread; if (access(SUPP_CONFIG_FILE, R_OK|W_OK) == 0) { return 0; } else if (errno != ENOENT) { LOGE("wifi %s() Cannot access \"%s\" %s", __FUNCTION__ , SUPP_CONFIG_FILE, strerror(errno)); return -1; } srcfd = open(SUPP_CONFIG_TEMPLATE, O_RDONLY); if (srcfd 0) { LOGE("wifi %s() Cannot open \"%s\" %s", __FUNCTION__ , SUPP_CONFIG_TEMPLATE, strerror(errno)); return -1; } destfd = open(SUPP_CONFIG_FILE, O_CREAT|O_WRONLY, 0660); if (destfd 0) { close(srcfd); LOGE("wifi %s() Cannot create \"%s\" %s", __FUNCTION__ , SUPP_CONFIG_FILE, strerror(errno)); return -1; } while ((nread = read(srcfd, buf, sizeof(buf))) != 0) { if (nread 0) { LOGE("wifi %s() Error reading \"%s\" %s", __FUNCTION__ , SUPP_CONFIG_TEMPLATE, strerror(errno)); close(srcfd); close(destfd); unlink(SUPP_CONFIG_FILE); return -1; } write(destfd, buf, nread); } close(destfd); close(srcfd); if (chown(SUPP_CONFIG_FILE, AID_SYSTEM, AID_WIFI) 0) { LOGE("wifi %s() Error changing group ownership of %s to %d %s", __FUNCTION__ , SUPP_CONFIG_FILE, AID_WIFI, strerror(errno)); unlink(SUPP_CONFIG_FILE); return -1; } return 0; } int wifi_start_supplicant() { char supp_status[PROPERTY_VALUE_MAX] = { \0 }; int count = 200; /* wait at most 20 seconds for completion */ #ifdef HAVE_LIBC_SYSTEM_PROPERTIES const prop_info *pi; unsigned serial = 0; #endif LOGD("wifi %s() function in" , __FUNCTION__ ); /* Check whether already running */ if (property_get(SUPP_PROP_NAME, supp_status, NULL) strcmp(supp_status, "running") == 0) { LOGD("wifi %s() wpa supplicant running" , __FUNCTION__ ); return 0; } property_set("ctl.start", "wpa_supplicant"); return 0; /* Before starting the daemon, make sure its config file exists */ if (ensure_config_file_exists() 0) { LOGE("wifi %s() Wi-Fi will not be enabled", __FUNCTION__ ); return -1; } /* Clear out any stale socket files that might be left over. */ wpa_ctrl_cleanup(); #ifdef HAVE_LIBC_SYSTEM_PROPERTIES /* * Get a reference to the status property, so we can distinguish * the case where it goes stopped = running = stopped (i.e., * it start up, but fails right away) from the case in which * it starts in the stopped state and never manages to start * running at all. */ pi = __system_property_find(SUPP_PROP_NAME); if (pi != NULL) { serial = pi- serial; } #endif property_set("ctl.start", SUPPLICANT_NAME); LOGD("wifi %s() property_set(\"ctl.start\", %s );" , __FUNCTION__ , SUPPLICANT_NAME ); sched_yield(); while (count-- 0) { usleep(100000); #ifdef HAVE_LIBC_SYSTEM_PROPERTIES if (pi == NULL) { pi = __system_property_find(SUPP_PROP_NAME); } if (pi != NULL) { __system_property_read(pi, NULL, supp_status); if (strcmp(supp_status, "running") == 0) { return 0; } else if (pi- serial != serial strcmp(supp_status, "stopped") == 0) { return -1; } } #else if (property_get(SUPP_PROP_NAME, supp_status, NULL)) { if (strcmp(supp_status, "running") == 0) { LOGD("wifi %s() wpa supplicant running" , __FUNCTION__ ); return 0; } } #endif } LOGE("wifi %s() timeout!" , __FUNCTION__ ); return -1; } int wifi_stop_supplicant() { char supp_status[PROPERTY_VALUE_MAX] = { \0 }; int count = 50; /* wait at most 5 seconds for completion */ /* Check whether supplicant already stopped */ if (property_get(SUPP_PROP_NAME, supp_status, NULL) strcmp(supp_status, "stopped") == 0) { return 0; } LOGD( "wifi %s() stop wpa_supplicant...", __FUNCTION__ ); property_set("ctl.stop", SUPPLICANT_NAME); sched_yield(); while (count-- 0) { usleep(100000); if (property_get(SUPP_PROP_NAME, supp_status, NULL)) { if (strcmp(supp_status, "stopped") == 0) return 0; } } return -1; } int wifi_connect_to_supplicant() { char ifname[256]; char supp_status[PROPERTY_VALUE_MAX] = { \0 }; LOGD( "wifi %s() function in", __FUNCTION__ ); /* Make sure supplicant is running */ if (!property_get(SUPP_PROP_NAME, supp_status, NULL) || strcmp(supp_status, "running") != 0) { LOGE("wifi %s() Supplicant not running, cannot connect", __FUNCTION__); return -1; } property_get("wifi.interface", iface, WIFI_TEST_INTERFACE); LOGD("wifi %s() property_get(\"wifi.interface\", iface, WIFI_TEST_INTERFACE);" , __FUNCTION__ ); LOGD("wifi %s() iface=%s", __FUNCTION__ , iface ); LOGD("wifi %s() IFACE_DIR=%s", __FUNCTION__ , IFACE_DIR ); if (access(IFACE_DIR, F_OK) == 0) { LOGD("wifi %s() IFACE_DIR ok", __FUNCTION__ ); snprintf(ifname, sizeof(ifname), "%s/%s", IFACE_DIR, iface); } else { LOGE("wifi %s() IFACE_DIR NG", __FUNCTION__ ); LOGE("wifi %s() IFACE_DIR check error=%s", __FUNCTION__ , strerror(errno) ); strlcpy(ifname, iface, sizeof(ifname)); } LOGD("wifi %s() ifname=%s", __FUNCTION__ , ifname ); LOGD("wifi %s() wpa_ctrl_open(%s);", __FUNCTION__ , ifname); ctrl_conn = wpa_ctrl_open(ifname); if (ctrl_conn == NULL) { LOGE("wifi %s() Unable to open connection to supplicant on \"%s\" %s", __FUNCTION__ , ifname, strerror(errno)); return -1; } monitor_conn = wpa_ctrl_open(ifname); if (monitor_conn == NULL) { wpa_ctrl_close(ctrl_conn); ctrl_conn = NULL; return -1; } if (wpa_ctrl_attach(monitor_conn) != 0) { wpa_ctrl_close(monitor_conn); wpa_ctrl_close(ctrl_conn); ctrl_conn = monitor_conn = NULL; return -1; } return 0; } int wifi_send_command(struct wpa_ctrl *ctrl, const char *cmd, char *reply, size_t *reply_len) { static const char *zero=""; int ret; char text[256]; LOGD( "wifi %s() function in command=%s", __FUNCTION__ , cmd ); if (ctrl_conn == NULL) { LOGV("wifi %s() Not connected to wpa_supplicant - \"%s\" command dropped.\n", __FUNCTION__ , cmd); return -1; } /* switch(cmd[0]) { case B if( strncmp(cmd , "BLACKLIST" , 9 ) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); *reply_len=0; return 0; } break; case D if( strncmp(cmd , "DRIVER RSSI-APPROX" , 18) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); reply=""; *reply_len=0; return 0; } if( strncmp(cmd , "DRIVER LINKSPEED" , 16) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); reply=""; *reply_len=0; return 0; } else if( strncmp(cmd , "DRIVER" , 6) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); *reply_len=0; return 0; } break; case G if( strncmp(cmd , "GET_" , 4 ) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); *reply_len=0; return 0; } break; } */ ret = wpa_ctrl_request(ctrl, cmd, strlen(cmd), reply, reply_len, NULL); snprintf( text , 254 , "%s" , reply ); text[((*reply_len 256)?*reply_len 255)]= \0 ; if (ret == -2) { LOGD("wifi %s() %s command timed out.", __FUNCTION__ , cmd); return -2; } else if (ret 0 || strncmp(reply, "FAIL", 4 ) == 0 ) { LOGE( "wifi %s() function command=%s (reply=FAIL || ret 0) reply=%s length=%d ret=%d return -1;", __FUNCTION__ , cmd, text, *reply_len , ret ); return -1; } LOGD( "wifi %s() function command=%s reply=%s ret=%d", __FUNCTION__ , cmd , text , ret ); if (strncmp(cmd, "PING", 4) == 0) { reply[*reply_len] = \0 ; } return 0; } int wifi_wait_for_event(char *buf, size_t buflen) { size_t nread = buflen - 1; int fd; fd_set rfds; int result; struct timeval tval; struct timeval *tptr; LOGD( "wifi %s() function in", __FUNCTION__ ); if (monitor_conn == NULL) { LOGD("wifi %s() Connection closed\n" , __FUNCTION__ ); strncpy(buf, WPA_EVENT_TERMINATING " - connection closed", buflen-1); buf[buflen-1] = \0 ; return strlen(buf); } result = wpa_ctrl_recv(monitor_conn, buf, nread); if (result 0) { LOGD("wifi %s() wpa_ctrl_recv failed %s\n", __FUNCTION__ , strerror(errno)); strncpy(buf, WPA_EVENT_TERMINATING " - recv error", buflen-1); buf[buflen-1] = \0 ; return strlen(buf); } buf[nread] = \0 ; /* LOGD("wait_for_event result=%d nread=%d string=\"%s\"\n", result, nread, buf); */ /* Check for EOF on the socket */ if (result == 0 nread == 0) { /* Fabricate an event to pass up */ LOGD("wifi %s() Received EOF on supplicant socket" , __FUNCTION__ ); strncpy(buf, WPA_EVENT_TERMINATING " - signal 0 received", buflen-1); buf[buflen-1] = \0 ; return strlen(buf); } /* * Events strings are in the format * * N CTRL-EVENT-XXX * * where N is the message level in numerical form (0=VERBOSE, 1=DEBUG, * etc.) and XXX is the event name. The level information is not useful * to us, so strip it off. */ if (buf[0] == ) { char *match = strchr(buf, ); if (match != NULL) { nread -= (match+1-buf); memmove(buf, match+1, nread+1); } } return nread; } void wifi_close_supplicant_connection() { LOGD( "wifi %s() function in", __FUNCTION__ ); if (ctrl_conn != NULL) { wpa_ctrl_close(ctrl_conn); ctrl_conn = NULL; } if (monitor_conn != NULL) { wpa_ctrl_close(monitor_conn); monitor_conn = NULL; } } int wifi_command(const char *command, char *reply, size_t *reply_len) { return wifi_send_command(ctrl_conn, command, reply, reply_len); } RSSI(電界強度)をGUIに反映させるには? fi01さんより、RSSI値をAndroid GUIに反映させる修正をコメントに頂きました。 driver_wext.c はシャープのWebサイトより、IS01向けGPLソースを取得して driver_wext.c のみ利用した。 $ diff -u driver_wext.c.gpl_is01 driver_wext.c --- driver_wext.c.gpl_is012011-01-13 22 05 39.827724368 +0900 +++ driver_wext.c2011-01-13 22 06 34.807605306 +0900 @@ -2715,7 +2715,7 @@ } else if( os_strncasecmp(cmd, "scan-channels", 13) == 0 ) { } - else if( os_strcasecmp(cmd, "rssi") == 0 ) { + else if( os_strcasecmp(cmd, "rssi") == 0 || os_strcasecmp(cmd, "rssi-approx") == 0 ) { struct iwreq wrq; struct iw_statistics stats; signed int rssi; 以上。 コメント テスト -- (is01rebuild ) 2011-01-05 15 14 10 IS01向けGPLソースでのRSSIの取得は下記でよいかもです。 - else if( os_strcasecmp(cmd, "rssi") == 0 ) { + else if( os_strcasecmp(cmd, "rssi") == 0 || os_strcasecmp(cmd, "rssi-approx") == 0 ) -- (fi01) 2011-01-13 16 54 22 fi01さん、ありがとうございます。 追って、組み込みます。 wpa_supplicant/driver_wext.c はまだ、全く見ていなかったので助かります。 私がすると、/sysから直接読み込むところでした^^; -- (is01rebuild ) 2011-01-13 21 19 04 # echo 0 wifi # echo 0 polling # echo 1 wifi # echo 1 polling # stop synergy_service # start synergy_service でwlan0が復活することが確認できました。 wifi.cを上手く書き換えると確実性が上がるかもしれません。 -- (RO215IS01) 2011-01-14 04 29 06 wpa_ctrl_openで"/dev/socket/wpa_wlan0"を指定すれば "/data/misc/wifi/wpa_supplicant.conf"の修正 ctrl_interface=DIR=/data/misc/wifi/sockets は不要です。 -- (fi01) 2011-01-14 08 56 30 自ビルドcyanogenmodの場合は設定ファイルの修正が必要でした。 dhcpでIPアドレス取得後すぐに切断されてしまう場合は下記を適用してみてください。 system/etc/dhcpcd/dhcpcd-run-hooks - if ls "${hook}" /dev/null 2 1; then + if [ -f "${hook}" ]; then -- (fi01) 2011-01-14 14 46 51 RO215IS01さん、fi01さんありがとうございます。 wpa_ctrl_openで"/dev/socket/wpa_wlan0"は後ほど試してみます。 wiki内にマージします。 デフォルトのservice起動では socket wpa_wlan0 dgram 660 wifi wifi が指定されてますので、それを利用という形でしょうか。 wpa_supplicant も Android もかなりの素人なので助かります。 現段階でAndroidのバージョンが、2.2_r1.3、2.2.1_r1、2.3.1r1、 CyanogenMod6(でしょうか?)の情報が入ってきていますので、 本wikiでもバージョン毎の差異をまとめないといけないですね。 ベースが大きく変わらなければほぼ同一の内容でいけるとは思いますが。 -- (is01rebuild ) 2011-01-14 18 52 20 No spitting on the street.I know what you wantHe resolved to give up smoking.The teams are coming onto the field.What s the weather like to day? Does the computer ever make a mistake.It rather surprised me.Is this the fight bus for the Capital Library? Cancer is a deadly disease.Will you connect this wire to the television ? -- (http //oakleyfrogskins2.cabanova.com/) 2013-03-17 06 38 29 名前 コメント すべてのコメントを見る